package com.hanamaki.unittest.junit.parameterize;

import com.hanamaki.unittest.junit.parameterize.util.FileUtil;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

/**
 * @author hanamaki
 * @version 1.0
 * @date 2021/7/2 16:50
 */

/**
 * 想要实现参数化
 * 1. 将类的运行方式改为 迭代运行  @RunWith(Parameterized.class)
 * 2. 想要测试的 方法中 需要几个 数据 就在 测试类中创建几个相同数据类型的属性,为其添加 有参构造方法
 * 3. 创建 数据 从二维数组中创建数据 使用 注解 @Parameters
 * 4. 测试方法中  使用 类中的属性来测试
 *
 *
 * 【注意：】
 * 1. 如果数据 是直接静态初始化的 我们的构造方法 在接受数据时 可以使用和数据相同数据类那个 来保存参数化中的数据
 * 2. 如果数据 是从 【数据库、文件中】读取出来 构造方法 必须使用 String类型的参数来接受
 * 3. 在JUnit的 测试类中 只能存在一个 数据源，TestNg可以存在多个
 */
@RunWith(Parameterized.class)
public class CalcTest1 {

    static Calc calc;

//    运算的  两个数值
    private int a;
    private int b;
    //    运算的预期结果
    private int expected;

    public CalcTest1(String a, String b, String expected) {
        this.a = Integer.parseInt(a);  // alt + enter
        this.b = Integer.parseInt(b);
        this.expected = Integer.parseInt(expected);
    }

    @BeforeClass
    public static void setUp() {
        calc = new Calc();
    }


    @Test
    public void testAdd() {
//        运算得到 实际值
        int actual = calc.add(this.a, this.b);
        Assert.assertEquals("断言测试：",expected, actual);
    }

    @Test
    public void testMax() {

    }
//
//    @Test
//    public void testPar() {
//        Object[][] par = new Object[2][3];
//        par[0][0] = 1;
//        par[0][1] = 2;
//        par[0][2] = 3;
//
//        par[1][0] = 3;
//        par[1][1] = 6;
//        par[1][2] = 9;
//
//
//        for (Object[] objects : par) {
//            for (Object object : objects) {
//                System.out.print(object + "\t");
//            }
//            System.out.println();
//        }
//
//    }

//    @Test
//    public void t() {
//        Object[][] sqlContent = JDBC_C3P0_Util.getSqlContent("`add`");
//        for (Object[] objects : sqlContent) {
//            for (Object object : objects) {
//                System.out.print(object + "\t");
//            }
//            System.out.println();
//        }
//    }
//
//    @Test
//    public void tfile() {
//        Object[][] fileContent = FileUtil.getFileContent("src/com/hanamaki/unittest/parameterize/fileContent.txt");
//        for (Object[] objects : fileContent) {
//            for (Object object : objects) {
//                System.out.print(object + "\t");
//            }
//            System.out.println();
//        }
//    }

    @Parameterized.Parameters
    public static Object[][] dataSql() {
//        return JDBC_C3P0_Util.getSqlContent("`add`");
        return FileUtil.getFileContent("src/com/hanamaki/unittest/parameterize/fileContent.txt");
    }


//    @Parameterized.Parameters
//    public static Object[][] data() {
//        return new Object[][]{
//                new Object[]{1, 2, 3},
//                new Object[]{4, 5, 6},
//                new Object[]{7, 2, 9},
//                new Object[]{9, 2, 11}
//        };
//    }

}
